perm filename FILLER.F4[MSS,LCS]5 blob sn#122697 filedate 1974-10-01 generic text, type T, neo UTF8
00200	****** FILLER, HGHT, MISS, HALF ********
00400	C  Q AND R  ARE X,Y COORDS.  NE(1)=WDCNT. OTHER NE'S HAVE 3
00600	C   FOR INVIS. VECTORS.   M=VERTICAL SCAN LINES
00800		SUBROUTINE FILLER(Q,R,NE,M)
01000		DIMENSION Q(1),R(1),NE(1)
01200		KK=NE(1)
01400	CC	LA=0
01600		KJ=2
01800		DO 4 K=2,KK
02000		IF(NE(K).NE.3)GO TO 11
02200	CCCC	NE(K)=KJ
02400		NE(K)=-1
02600		KJ=K+1
02800		GO TO 4
03000	11	NE(K)=0
03200	4	CONTINUE
03400		RLFT=1000
03600		RT=-1000
03800		B=RT
04000		DO 12 K=1,KK
04200		H=IFIX(Q(K))
04400		IF(H.LT.RLFT)RLFT=H
04600	C  FINDS LEFT AND RIGHT LIMITS.
04800		IF(H.GT.RT)RT=H
05010		IF(H.EQ.B)NE(K)=-1
05200	C FINDS VERTICAL LINES.
05400		B=H
05600		Q(K)=H
05800	12	R(K)=IFIX(R(K))
06000	CCCC	NE(KK+1)=KJ
06200		NE(KK+1)=-1
06400	C  FINDS JUMPS
06600		LEFT=RLFT
06800		LRT=RT
07000		JA=3
07200	123	DO 41 K=2,KK
07400	41	IF(NE(K).EQ.0)GO TO 51
07600		RETURN
07800	C  NO MORE LINES TO LOOK AT.
08000	
08200	51	J=LEFT
08800	42	RJ=J+.001
08900		JCONT=0
08910	CC	JN=J
08955		LEFT=J
09000	
10800	C  NEXT LOOKS TO SEE IF 'ALT' IS HIGHEST AVAILABLE POINT.
11000		JJ=-1
11200		ALT=-1000.
11400	200	DO 45 L=2,KK
11600		IF(NE(L).NE.0)GO TO 45
11800	C  PASSES ANY LINE THAT HAS BEEN USED FOR ↑ OR ↓ SO FAR.
12000	C NE=-1 ↓;  =1 ↑;  
12200		IF(MISS(L,RJ,Q))GO TO 45
12400	C  FINDS HIGHEST UNUSED LINE UNDER J
12600		H=HGHT(L,RJ,Q,R)
12800		IF(H.LT.ALT)GO TO 45
13000		ALT=H
13200		JJ=L
13400	45	CONTINUE
13500		IF(JJ)GO TO 43
13600	C  DID NOT FIND A NEW LINE TO USE.
13610		JCONT=-1
13620		LEFT=J
13700	
15500	46	JA=3
15600	52	KN=Q(JJ)
15800		KL=Q(JJ-1)
16000		IF(KN.LT.KL)KN=KL
16800	50	DO 49 I=J,KN,M
17000		RJ=I+.001
17200		IF(I.EQ.KN)RJ=RJ-.002
17300		ALT=HGHT(JJ,RJ,Q,R)
17600	CC	LA=K
17800	C  NEXT FINDS HIGHEST POINT TO DRAW TO.
18000		B=-1000
18200		JK=-1
18300		XALT=ALT+.001
18400	400	DO 47 L=2,KK
18600		IF(L.EQ.JJ.OR.MISS(L,RJ,Q).OR.NE(L).LT.0)GO TO 47
18800		H=HGHT(L,RJ,Q,R)
19000		IF(H.GT.XALT)GO TO 47
19200		IF(H.LE.B)GO TO 47
19300		B=H
19400	C  FINDS HIGHEST POINT.
19600		JK=L
19800	47	CONTINUE
20000		IF(JK)GO TO 48
20010		NE(JJ)=-1
20020	300	IF(ALT-B.GT..00001)GO TO 59
20022	C  SKIPS POINTS TOO CLOSE TOGETHER. WIPES OUT BOTH LINES.
20030		NE(JK)=-1
20035		GO TO 48
20040	59	CALL LINES(RJ,ALT,JA)
20200	100	CALL LINES(RJ,B,2)
20400		NE(JK)=1
20600		CALL DPYOUT(1)
20700		JA=2
20710	49	CONTINUE
20810		L=1
20820		IF(KN.EQ.KL)L=-1
20960		JJ=JJ+L
20965		J=0
20969		IF(L)J=-1
20971	C  FIGURES OUT DIRECTION OF NEXT LINE SEG.
20973		IF(KN+M.GT.Q(JJ+J).OR.JJ.GT.KK.OR.NE(JJ).NE.0)GO TO 43
20986		J=I+M
21000		GO TO 52
21200	48	JA=3
21600	43	J=LEFT+M
21800	C  M IS SET IN FILLMS
22000		IF(J.LE.LRT)GO TO 42
22020		IF(JCONT)GO TO 51
22200		END
22400	
22600		FUNCTION HGHT(J,A,Q,R)
22800		DIMENSION Q(1),R(1)
23000		B=R(J-1)
23200		D=Q(J-1)
23400		F=Q(J)
23600		HGHT=((R(J)-B)*(A-D))/(F-D)+B
23800		IF(F.EQ.D)HGHT=B
24000		END
24200	
24400		FUNCTION MISS(J,A,Q)
24600		DIMENSION Q(1)
24800		B=Q(J)
25000		C=Q(J-1)
25200		MISS=-1
25400		IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
25600		END
25800	C  MISS=-1, HIT=0